//
//  myUITableTableViewController.m
//  BulltinBoard
//
//  Created by joker on 15/6/12.
//  Copyright (c) 2015年 joker. All rights reserved.
//

#import "bulltinBoardListTableViewController.h"
#import "bulltinItem.h"
#import "bulltinBoardViewController.h"
#import "UtilitiesFunctions.h"
#import "SVProgressHUD.h"
#import "MJRefresh.h"



@interface bulltinBoardListTableViewController ()

@end

@implementation bulltinBoardListTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
        //默认一页显示的条目数
    self.pageSize=[NSNumber numberWithInt:4];
        //初始化公告列表数据源数组
    self.bulltinItemsArray=[[NSMutableArray alloc] init];

#ifdef _ADD_PULL_REFRESH
    self.navigationItem.rightBarButtonItem=nil;
    [self.loadMoreItems removeFromSuperview];
//        设置下拉刷新
    MJRefreshNormalHeader *header=[MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadInitialData)];
    header.lastUpdatedTimeLabel.hidden=YES;
    [header beginRefreshing];
    self.tableView.header=header;
    

    self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
        [self refreshFormerBulltinItems];
        [self.tableView.footer endRefreshing];
    }];
#else
        //从服务器上获取公告信息
    [self loadInitialData];
#endif
        //按公告发布的早晚，排序公告列表条目，发布最晚的条目排在最前面
    [self sortMessageItems];
}
#pragma mark - pull up to refresh call back function
-(void)RefreshData{
    NSLog(@"refrehs data");
}
#pragma  mark - Custom function to help this application
-(void)loadInitialData{
    
#pragma mark - Test data for off-line debug
//    bulltinItem *item1=[bulltinItem new];
//    item1.title=@"清明节放假通知";
//    item1.createDate=[UtilitiesFunctions convertTimestampStringToDisplay:@"20140716155436"];
//    item1.message=@"全体员工：\n\t经公司研究决定，2012清明节放假及调休安排时间如下：\n\t1.清明节放假时间为2012年4月2日(星期一)至2012年4月4日(星期三)，共3天，2012年4月5日正式开始上班，2012年3月31日(周六)和2012年4月1日(周日)照常上班。\n\t2.放假期间，有需要安排员工值班的部门请在2012年4月1日上午下班之前把值班名单报给人事部XXX，以便统计。\n\tXX科技股份有限公司";
//    
//    bulltinItem *item2=[bulltinItem new];
//    item2.title=@"公司员工培训工作计划";
//    item2.createDate=[UtilitiesFunctions convertTimestampStringToDisplay:@"20150614205426"];
//    item2.message=@"\t为了提高员工和管理人员的素质，提高公司的管理水平，保证公司可持续性发展;必须进行有效的培训，做好培训的基础是要有可行完整实用的培训计划，现将今年的培训工作计划如下：\n\n\t一、建立集团公司、下属各分公司和车间班组的三级培训教育体系\n\t\t一级培训是集团公司负责集团大政方针、公司文化、发展战略、员工心态、规章制度、管理技能、新技术、新知识等前瞻性教育和培训。培训对象为集团公司中层以上管理人员和集团全体管理人员。组织部门为人力资源部，每月至少进行一次，每次不少于一个半小时。\n\t\t二级培训是各分公司负责对本单位班组长以上和管理人员的培训，主要内容是公司企业文化教育、本单位规章制度及安全操作规程;负责人为各分公司总经理。每月一次，每次不少于一个半小时。\n\t\t三级培训是各车间班组负责对所管辖的全体员工的培训，主要内容是岗位职责、操作规程、安全操作规程、岗位工作流程和工艺技能专业知识、作业指导书等，负责人是各车间班组的负责人。培训时间是每周不少于一次，每次不少于一小时。利用每天的班前会班后会，反复学习本岗位职责和安全操作规程。\n\n\t二、各分公司专业业务技能知识的培训，主要内容是三个方面：一是工艺技术知识的培训，二是机械设备维护和保养知识的培训，三是生产管理知识的培训;每周一次，每次不少于一小时。\n\n\t三、各部门(如销售、财务、采购、人力资源、国际贸易、办公室)专业知识的培训由部门负责人组织进行，主要内容就是本部门相关专业知识的系统培训，结合工作实际运行中出现的专业问题，进行探讨培训交流，教会下属如何去做好工作，提高下属的专业技能，每周一次，每次不少于一小时。培训形式多种多样，目的就是提高人员素质和工作质量、产品质量。\n\n\t四、新员工的岗前培训：新员工集中招聘八人以上者由公司人力资源部组织培训，不得少于三天，主要内容是公司简介、发展历程、战略目标、公司文化、产品介绍、通用规章制度和通用安全操作规程，新员工到车间后(或班组)进行岗位职责和操作规程的培训，第一个月内在车间实际培训不得少于6小时，使每个员工到岗后明确本岗位的工作职责范围，本岗应知、应会，应做什么，不能做什么;本岗位工作做到什么标准，明确本岗位操作规程和安全操作规程。新员工在上岗二个月后要有书面考试，考试成绩纳入试用期转正的考核评定中。对于平时补充招聘到岗的新员工人力资源部每月集中进行一次岗前培训。\n\n\t五、培训的考核和评估，培训计划的有效运行要有组织上的保证，并要用制度的形式确定下来，对培训结果要跟踪。建立管理人员培训档案，把管理人员参加培训、培训作业上交等情况纳入档案管理和全年的考核之中。考核是两个方面，一是对培训组织者的考核，二是对员工参训后的评价和考核;要保证培训工作落实到位。使培训工作真正成为公司的基础工作，培训真正起到作用，有效地提高管理人员和员工的素质，并使之能科学、扎实而又有效地开展起来，变员工要我培训为我要培训，以适应公司的转型和高速发展，塑造学习型组织，体现公司和个人的价值。\n\n\t六、要求：各分公司各部门拟定本单位的年度培训计划，培训年度工作计划于一月十日前报主管领导;培训计划要认真去做，细化到每个月进行几次，培训计划中要明确培训的组织者、责任人，培训时间，培训主题及内容，培训形式，参训人员，培训主讲，培训要有记录，对培训结果要进行评估和跟踪;培训形式可多种多样，严格按培训计划执行;人力资源部每月至少进行一次检查指导。";
//    
//    bulltinItem *item3=[bulltinItem new];
//    item3.title=@"消防设施安全通知";
//    item3.createDate=[UtilitiesFunctions convertTimestampStringToDisplay:@"20120507021416"];
//    item3.message=@"公司各工作人员:\n\t为贯彻市政府消防安全工作会议精神，通过认真研究我公司消防安全设施摆放问题后做出以下变动：将放在玻璃门前的消防栓移到正门旁以便于消防使用\n\n\t特此通知\n\t\t××总公司\n\t\t××××年x月x日";
//    
//    [self.bulltinItemsArray addObject:item1];
//    [self.bulltinItemsArray addObject:item2];
//    [self.bulltinItemsArray addObject:item3];
#pragma mark - Request data from server

        //用员工的用户名和密码来登陆OA服务器，从面获取员工相关信息，以备下一步的各种网络请求提供可用参数
            [self refreshBulltinItemListDataSource:self.UserInformationDictionary];
#ifdef _ADD_PULL_REFRESH
    [self.tableView.header endRefreshing];
#endif
}

-(void)sortMessageItems{
    [self.bulltinItemsArray sortUsingComparator:^(bulltinItem *item1,bulltinItem *item2){
        NSComparisonResult compareResult=[[item2 getCreateDate] compare:[item1 getCreateDate]];
        return compareResult;
    }];
}

#pragma  make -compose the memory relative problems

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    // Return the number of rows in the section.
    return [self.bulltinItemsArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ListPrtotypeCell" forIndexPath:indexPath];
    
    bulltinItem *item=[self.bulltinItemsArray objectAtIndex:indexPath.row];
    
    UILabel *titleLabel;
    titleLabel=(UILabel *)[cell viewWithTag:1];
    titleLabel.text=item.title;
    
    UILabel *timestampLabel;
    timestampLabel=(UILabel *)[cell viewWithTag:2];
    timestampLabel.text=item.createDate;
    
            if(!item.isNewToRead){
                titleLabel.textColor=[UIColor darkGrayColor];
                timestampLabel.textColor=[UIColor darkGrayColor];
            }else
            {
                titleLabel.textColor=[UIColor darkTextColor];
                timestampLabel.textColor=[UIColor darkTextColor];
            }
    return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  
    bulltinItem *temp=self.bulltinItemsArray[indexPath.row];

    if(temp.isNewToRead){
        temp.isNewToRead=NO;
        [self.tableView reloadData];
    }
    
    if(temp.message==nil){
        NSString *OAfUserID=self.UserInformationDictionary[@"OAfUserID"];
        NSString *AccessKey=self.UserInformationDictionary[@"AccessKey"];
        NSString *OATitleID=temp.titleID;
        
        NSString *returnBulltinItemDetailJSONString=[UtilitiesFunctions getBulltinItemDetailWithOAfUserID:OAfUserID AndAccessKey:AccessKey PlusOATitleID:OATitleID];
        
//        NSLog(@"%@",returnBulltinItemDetailJSONString);
        if(returnBulltinItemDetailJSONString){
           
            NSData *returnBulltinItemDetailData=[returnBulltinItemDetailJSONString dataUsingEncoding:NSUTF8StringEncoding];
            
            NSError *error;
            NSDictionary *returnBulltinItemDetailDictionary=[NSJSONSerialization JSONObjectWithData:returnBulltinItemDetailData options:NSJSONReadingMutableLeaves error:&error];
            if(!error){
                temp.message=returnBulltinItemDetailDictionary[@"Contest"]  ;
            }
            else{
                [UtilitiesFunctions showLogResultTitle:@"JSON转换错误" withMessage:@"返回的公告详情可能不是有效的JSON格式！"];
            }
        }
        else{
            [UtilitiesFunctions showLogResultTitle:@"请求公告详情错误"withMessage:@"没有返回相应的公告详情"];
        }
    }
}
-(void)refreshFormerBulltinItems{
        //收集请求参数
    NSString *OAfUserID=self.UserInformationDictionary[@"OAfUserID"];
    NSString *AccessKey=self.UserInformationDictionary[@"AccessKey"];
    
    bulltinItem *lastItem=self.bulltinItemsArray.lastObject;
    
    NSString *TimeStamp=[NSString stringWithFormat:@"%ld",(long)[lastItem.getCreateDate timeIntervalSince1970]];
    
    NSString *response=[UtilitiesFunctions getBulltinItemsListWithOAfUserID:OAfUserID AccessKey:AccessKey PageSize:self.pageSize TimeStamp:TimeStamp];
    
    if(response)
    {
        NSError *error;
        NSData *responseData=[response dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary *responseDict=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&error];
        
        if([NSJSONSerialization isValidJSONObject:responseDict]){
            NSString *listString=responseDict[@"List"];
            NSData *listData=[listString dataUsingEncoding:NSUTF8StringEncoding];
            NSMutableArray *formerItems=[NSJSONSerialization JSONObjectWithData:listData options:NSJSONReadingAllowFragments error:&error];
            
            
            NSMutableArray *formerItemsArray=[NSMutableArray new];
            if(!error){
                for(NSDictionary * formerItem in formerItems){
                    bulltinItem *item=[bulltinItem new];
                    item.title=formerItem[@"TitleName"];
                    item.titleID=formerItem[@"TitleID"];
                    item.createDate=[UtilitiesFunctions convertTimestampStringToDisplay:[formerItem[@"Timestamp"] integerValue]];
                    
                    
                    NSInteger tag=[formerItem[@"Tag"] integerValue];
                    item.isNewToRead=(tag==0)?NO:YES;
                    [formerItemsArray addObject:item];
                }
                [self.bulltinItemsArray addObjectsFromArray:formerItemsArray];
                    //                self.bulltinItemsArray=formerItemsArray;
                [self.tableView reloadData];
            }
        }
        else
        {
            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
            [SVProgressHUD showSuccessWithStatus:@"没有更早的公告信息了!"];
            self.loadMoreItems.enabled=NO;
            return;
        }
        
    }
    [self.tableView reloadData];
}

- (void)refreshBulltinItemListDataSource: (NSDictionary *)userInformation{
        //收集请求参数
    NSString *OAfUserID=self.UserInformationDictionary[@"OAfUserID"];
    NSString *AccessKey=self.UserInformationDictionary[@"AccessKey"];
    
    NSString *TimeStamp=[NSString stringWithFormat:@"%d",(int)[[NSDate date] timeIntervalSince1970]];
    
        //////////////////////////////////////////
        //使用协议规定的两个参数向服务器请求公告列表信息
    NSString *returnValueOfBulltinItemsListJSON=[UtilitiesFunctions getBulltinItemsListWithOAfUserID:OAfUserID AccessKey:AccessKey PageSize:self.pageSize TimeStamp:TimeStamp];
    
        //处理公告列表请求正确响应的情况
    if(returnValueOfBulltinItemsListJSON!=nil)
    {
            //判断是不有新的公告发布
        if([returnValueOfBulltinItemsListJSON compare:@"[]"]==NSOrderedSame)
        {
            [UtilitiesFunctions showLogResultTitle:@"提示信息" withMessage:@"没有新的公告信息!"];
            return;
        }
        
        NSData *returnValueOfBulltinItemsListDataFromJSONString=[returnValueOfBulltinItemsListJSON dataUsingEncoding:NSUTF8StringEncoding];
        
        NSError *error;
        
        NSDictionary *bulltinItemsDictionary=[NSJSONSerialization JSONObjectWithData:returnValueOfBulltinItemsListDataFromJSONString options:NSJSONReadingAllowFragments error:&error];
        
        if(error)
        {
            [UtilitiesFunctions showLogResultTitle:@"JSON串解析错误" withMessage:@"公告列表请求返回的ReturnValue可能不是有效的JSON格式!"];
            return;
        }
        
        NSString *listJSONString=bulltinItemsDictionary[@"List"];
        NSData *listJSONDataFromString=[listJSONString dataUsingEncoding:NSUTF8StringEncoding];
        
        NSMutableArray *bulltinItemsDictionaryArray=[NSJSONSerialization JSONObjectWithData:listJSONDataFromString options:NSJSONReadingAllowFragments error:&error];
        
        if(error)
        {
            [UtilitiesFunctions showLogResultTitle:@"JSON串解析错误" withMessage:@"公告列表请求返回的List字段可能不是有效的JSON格式!"];
            return;
        }
        
        
        NSLog(@"Returned Bulltin Items List is: \n%@",bulltinItemsDictionaryArray);
        
            //解析返回的公告列表信息，并存入公告列表数据源变量中
        NSMutableArray *refreshItems=[NSMutableArray new];
        if(!error){
            for (NSDictionary *bulltinItemDictionary in bulltinItemsDictionaryArray) {
                bulltinItem * item=[bulltinItem new];
                item.title=bulltinItemDictionary[@"TitleName"];
                item.titleID=bulltinItemDictionary[@"TitleID"];
                
                    //转换时间以使用显示
                NSNumber *secondsSince1970=[NSNumber numberWithInteger:[bulltinItemDictionary[@"Timestamp"] integerValue]];
                item.createDate=[UtilitiesFunctions convertTimestampStringToDisplay:[secondsSince1970 doubleValue]];
                    //判断公告信息是否已读
                NSInteger tag=[bulltinItemsDictionary[@"Tag"] integerValue];
                item.isNewToRead=(tag==0)?NO:YES;
                [refreshItems addObject:item];
            }
            self.bulltinItemsArray=refreshItems;
            [self.tableView reloadData];
            self.loadMoreItems.enabled=YES;
        }
    }
}

#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
    NSIndexPath *indexPath=[self.tableView indexPathForSelectedRow];
    
    bulltinItem *item=[self.bulltinItemsArray objectAtIndex:indexPath.row];
    
    UINavigationController *navigateViewController=(UINavigationController *)[segue destinationViewController];
    
    bulltinBoardViewController *bulltinViewController=(bulltinBoardViewController *)[navigateViewController.childViewControllers firstObject];
    
    bulltinViewController.currentItem=item;
}

#pragma mark - refresh data source utility function
- (IBAction)getFormerBulltinItems:(UIButton *)sender {
#ifndef _ADD_PULL_REFRESH
    self.loadMoreItems.enabled=NO;
    
    [SVProgressHUD showWithStatus:@"加载中..."];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    
#endif
    [self refreshFormerBulltinItems];
#ifndef _ADD_PULL_REFRESH
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    [SVProgressHUD showSuccessWithStatus:@"加载完成"];
    
    self.loadMoreItems.enabled=YES;
#endif
}

- (IBAction)refreshBulltinItemList:(UIBarButtonItem *)sender {
   #ifndef _ADD_PULL_REFRESH
    self.refreshBulltinItemListButton.enabled=NO;
    [self refreshBulltinItemListDataSource:self.UserInformationDictionary];
    self.refreshBulltinItemListButton.enabled=YES;
#endif
}

@end
